/**
 * Created by xjchen on 2024-05-11.
 * */

#ifndef MIDDLEWARE_SOFTINTERRUPT_H
#define MIDDLEWARE_SOFTINTERRUPT_H

#include "TaskModule.h"

class SoftInterrupt {
public:

    static SoftInterrupt *shareInstance();

    /**
     * 发起中断请求，在程序的任何位置均可调用
     *
     * @param target 响应中断的计算模块，该计算模块必须重载TaskModule::onInterrupted()方法。
     *               如果模块正在执行onCompute()，则被中断，执行target->onInterrupted()。
     * @param extraInfo 附带信息
     * @param infoLen 附带信息长度
     */
    USER_API void interrupt(TaskModule *target, void *extraInfo, int64_t infoLen);

    /**
     * 根据实例名称获取TaskModule指针
     * 
     * @param instanceName 实例名
     * @return 不存在时返回nullptr
     */
    USER_API TaskModule *getTaskModuleWithName(std::string instanceName);

private:
    SoftInterrupt();
};


#endif //MIDDLEWARE_SOFTINTERRUPT_H
